iT邦幫忙

2023 iThome 鐵人賽

DAY 24
0
自我挑戰組

一個營建系學生的韌體之路-自走車篇系列 第 24

【AMR_Day24】來用URDF刻一台車—物理特性

  • 分享至 

  • xImage
  •  

Gazebo

昨天只把差速小車的外觀建模出來,這時後送入Gazebo中仍然什麼都看不到!
https://ithelp.ithome.com.tw/upload/images/20231009/201404339ZAfsmMjXS.png

Service

先提一下要怎麼用Gazebo檢視這個URDF檔案,在【AMR_Day19】有介紹到如何使用RQt發送Service,那Gazebo在啟動時,提供了一些Service供ROS2使用。

ros2 service list 
/delete_entity
/gazebo/describe_parameters
/gazebo/get_parameter_types
/gazebo/get_parameters
/gazebo/list_parameters
/gazebo/set_parameters
/gazebo/set_parameters_atomically
/get_model_list
/pause_physics
/reset_simulation
/reset_world
/spawn_entity
/unpause_physics

要注意!啟動Gazebo的方式有兩種。

# 單純開啟gazebo不與ROS2連結
gazebo 
# 開啟gazebo與ROS2連結,後面的這些是為了連結gazebo_ros的動態函式庫
gazebo --verbose -s libgazebo_ros_init.so -s libgazebo_ros_factory.so

如果只用gazebo再ros2 service list,會發現沒有任何Service的存在哦!!!

spawn_entity

其中spawn_entity就是負責把URDF或SDF的內容送給Gazebo~
https://ithelp.ithome.com.tw/upload/images/20231009/20140433IGoqCsoTo7.png
https://ithelp.ithome.com.tw/upload/images/20231009/20140433NOSs7vcgng.png

差速小車的物理特性

為了成功在Gazebo模擬差速小車,我們要來幫它添加<inertial><collision>

collision

碰撞比較單純,以昨天的車身為例,只要將<visual>的內容移植成<collision>就好!

<?xml version="1.0"?>
<robot name="ej_robot">

    <link name="base_link"/>

    <link name="chaiss">
        <visual>
            <geometry>
                <box size="0.6 0.4 0.2"/>
            </geometry>
            <origin xyz="0 0 0.1" rpy="0 0 0"/>
        </visual>
        
        <!--除了材料之外,其他都一樣!-->
        <collision>
            <geometry>
                <box size="0.6 0.4 0.2"/>
            </geometry>
            <origin xyz="0 0 0.1" rpy="0 0 0"/>
        </collision>
        
    </link>
    
   ...
    
</robot>

inertial

接下來是需要添加慣性矩的部份。
我們用的形狀比較單純,可以帶入公式得到~
https://ithelp.ithome.com.tw/upload/images/20231009/20140433wQuRxNh7ap.png
來源:wiki inertia

基本格式

  • <inertial>的子元素有位置資訊、質量、慣性矩數值。

ixx ixy ixz

ixy iyy iyz

ixz iyz izz

<inertial>
    <origin xyz="${xyz}" rpy="${rpy}" />
    <mass value="${m}" />
    <inertia ixx="${(m/12) * (3*r*r + h*h)}" ixy="0" ixz="0"
             iyy="${(m/12) * (3*r*r + h*h)}" iyz="0"
             izz="${(m/2) * (r*r)}" />
</inertial>

一樣以車身為例

<?xml version="1.0"?>
<robot name="ej_robot">

    <link name="base_link"/>

    <link name="chaiss">
        <visual>
            <geometry>
                <box size="0.6 0.4 0.2"/>
            </geometry>
            <origin xyz="0 0 0.1" rpy="0 0 0"/>
        </visual>
        <collision>
            <geometry>
                <box size="0.6 0.4 0.2"/>
            </geometry>
            <origin xyz="0 0 0.1" rpy="0 0 0"/>
        </collision>
        
        <!--慣性矩-->
        <inertial>
            <origin xyz="0 0 0.1" rpy="0 0 0" />
            <mass value="1.0" />
            <inertia ixx="0.033" ixy="0" ixz="0"
                     iyy="0.043" iyz="0"
                     izz="0.17" />
        </inertial>
             
    </link>
    
   ...
    
</robot>

成果

https://ithelp.ithome.com.tw/upload/images/20231009/20140433Yng2t2TzEs.png

未完待續

雖然添加了物理特性,但我們還沒添加ROS的控制函式在小車上~
以及,要介紹一下方便寫URDF的小工具:XACRO!!!!


上一篇
【AMR_Day23】來用URDF刻一台車—外觀
下一篇
【AMR_Day25】來用URDF刻一台車—Plugin
系列文
一個營建系學生的韌體之路-自走車篇30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言